<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width,initial-scale=1.0">
	<title>测试</title>
	<style>
		* {
			margin: 0;padding: 0;
		}
		.container {
			width: 100%;
			display: flex;
			height: 50px;
		}
		.column {
			flex: 1;
		}
		.container .column:first-child {
			background-color: #000;
			min-width: 400px; 
			flex: 0;
		}
		/* .column:nth-child {
			/* background-color: #000; */
		} */
	</style>
</head>
<div class="container">
	<div class="column">column1</div>
	<div class="column">column2</div>
	<div class="column">column3</div>
</div>

<body>
	<noscript>
		<strong>We're sorry but propttt doesn't work properly without JavaScript enabled. Please enable it to
			continue.</strong>
	</noscript>
	<div id="app"></div>
	<script type="text/javascript">
		window.onload = () => {
// 			var number=9999999; 
// var arr=number.toString().split("");
// console.log(arr)
//  for(var i=arr.length-4;i>=0;i-=3)
//     {
//         arr[i]+=","
//     } 
// console.log(arr.join(""))
// 		return
			function add(a, b) {
        if (a.length < b.length) {
            a = '0' + a;
        }
        if (b.length < a.length) {
            b = '0' + b;
        }

        // 标志位 满十进一
        var addOne = 0;
        var res = [];
        for (var i = a.length; i >= 0; i--) {
            //像小学加法那样，从最后一位开始相加
            var c1 = a.charAt(i) - 0;
            var c2 = b.charAt(i) - 0;
            var sum = c1 + c2 + addOne;
            //满十进一
            if (sum > 9) {
                addOne = 1;
                res.unshift(sum - 10);
            } else {
                addOne = 0;
                res.unshift(sum);
            }
        }
        // 如果是1，就进一
        if (addOne) {
            res.unshift(addOne);
        }
        // 假如这种情况，'01'+'02' = '03'
        if (res[0] === 0) {
            res.splice(0, 1);
        }
        //数组变字符串
        return res.join('');
    }

    var rrr = add('30000000000000000000000000', '91111111111111111111111111');
	var a = '30000000000000000000000000';
	var b = '91111111111111111111111111';
    console.log( rrr);
    console.log( a.length,b.length);
return
// 第六题
			function EventEmitter(event,cb) {};
    EventEmitter.prototype.on = function(eventName,cb) {
        this[eventName] = cb;
    }
    EventEmitter.prototype.emit = function(eventName,message) {
        this[eventName](message);
    }
    var e = new EventEmitter();
    e.on('update',function(data){console.log(data)});
    e.emit('update','message');

			// 第五题
			let arrs = [1, 2, [3, 4, 5, [6, 7], 8], 9, 10, [11, [12, 13]]]
			function flatten(arr) {
  while (arr.some(item => Array.isArray(item))) {
    arr = [].concat(...arr)
  }
  return arr
}
console.log(flatten(arrs))
return
			
			// 第四题
var url = "http://www.taobao.com/index.php?key0=0&key1=1&key2=2.............";
var obj = parseQueryString(url);
console.log(obj)
function parseQueryString(argu){
  var str = argu.split('?')[1];
  var result = {};
  var temp = str.split('&');
  for(var i=0; i<temp.length; i++)
  {
     var temp2 = temp[i].split('=');
     result[temp2[0]] = temp2[1];
  }
  return result;
}
return
			// 第三题
		var number=9999999; 
var arr=number.toString().split("");
 for(var i=arr.length-4;i>=0;i-=3)
    {
        arr[i]+=","
    } 
console.log(arr.join(""))
return

function trans(obj) {
    var arr = [];
    var newObj = {};
    var pos,key;
    for(var p in obj) {
        key = p;
        pos = p.indexOf('_');
        p = p.slice(0,pos)+''+p.substr(pos+1,1).toLocaleUpperCase()+''+p.slice(pos+2);
        newObj[p] = obj[key];
    }
    return newObj;
}
console.log(trans({a_b:1,c:2,c_dd:3,dd:4}))
return
// 第一题
Array.prototype.distinct = function() {
    var ret = [];
    for (var i = 0; i < this.length; i++)
    {
        for (var j = i+1; j < this.length;) {   
            if (this[i] === this[j]) {
                ret.push(this.splice(j, 1));  //splice返回数组，这样是把数组存到了另一个数组里面，即数组元素是数组
            } else {
                j++;
            }
        }
    }
     return ret;
}
//for test
var arr = ['a','b','c','d','b','a','e'];
			//  constructor 方法是类的构造函数，是一个默认方法，通过 new 命令创建对象实例时，自动调用该方法。一个类必须有 constructor 方法，如果没有显式定义，一个默认的 consructor 方法会被默认添加。所以即使你没有添加构造函数，也是会有一个默认的构造函数的。一般 constructor 方法返回实例对象 this ，但是也可以指定  constructor 方法返回一个全新的对象，让返回的实例对象不是该类的实例。
			// ES6 要求，子类的构造函数必须执行一次 super 函数，否则会报错
			// constructor 中必须调用 super 方法，因为子类没有自己的 this 对象，而是继承父类的 this 对象，然后对其进行加工,而 super 就代表了父类的构造函数。super 虽然代表了父类 A 的构造函数，但是返回的是子类 B 的实例，即 super 内部的 this 指的是 B，因此 super() 在这里相当于 ```A.prototype.constructor.call(this, props)``。
			// 在普通方法中，指向父类的原型对象；在静态方法中，指向父类。在子类的 super.c()其实是调用父类的c()方法
			// 先声明instaceData的属性值
			let instaceData = {
				ecsT1Small: "ecs.t1.small",
				ecsT3Small: "ecs.t3.small",
				ecsT1Large: "ecs.t1.large"
			}
			// 声明dbTypeData的属性值
			let dbTypeData = {
				mysql: "mysql",
				mssql: "mssql",
				PPAS: "PPAS"
			}
			// 定义父类
			class Superclass {
				// 在里面用constructor接收属性值
				constructor(Id, Region, Name) {
					// 将接收的属性值添加到this
					this.id = Id;
					this.region = Region;
					this.name = Name;
				}
				// 掉用config可以拿到所有的属性值
				config() {
					return this;
				}
				c() {
					console.log('ccc')
				}
				// 调用buy可以拿到URL
				buy() {
					var urlList = [];
					for (let key in this) {
						this[key] ? urlList.push(key + "=" + this[key]) : ''//将属性值push到urlList网址数组
					}
					return `https://www.aliyun.com/buy?${urlList.join("&")}`;//拼接
				}
			}
			// 定义ECS继承Superclass
			class ECS extends Superclass {
				//接收通用属性跟独有属性Instance
				constructor(Id, Region, Name, Instance) {
					// 将通用属性传递给Superclass
					super(Id, Region, Name);
					// 新增实例独有属性
					this.instance = Instance;
				}
				v() {
				}
				c() {
					console.log('ECS的ccc')
					super.c()
				}
				d () {
					console.log('ECS的ddd')
				}
				// config() {
				// 	var superclass = super.config
				// 	return superclass
				// }
			}
			// 定义RDS继承Superclass
			class RDS extends Superclass {
				constructor(Id, Region, Name, DbType) {
					super(Id, Region, Name);
					// 新增实例独有属性
					this.instance = DbType;
				}
			}
			var f = new Superclass(1,2,3)
			console.log(f)
			f.id='改变了'
			console.log(f)
			var ddd = new ECS('id1','regin2','name3',instaceData.ecsT1Small)
			f.id='dad '
			console.log(f)
			console.log(ddd)

			// var arr = [1,3,6,10];
			// var a = arr.reduce((a,b)=>a+b)
			// console.log(a)

			// var b = 'a-bb-cccc-d-e';
			// function transf(str) {
			// 	return str.split('-').reduce((p,n)=>{
			// 		return p[0].toUpperCase()+p.slice(1)+n[0].toUpperCase()+n.slice(1)
			// 	});
			// }
			// transf(b)

			// function transf(str) {
			// 	return str
			// }
			// console.log(transf('aa-bb-ccc'))


			// var b = [1,2,3,3,2,5];
			// var b ={A:1};
			// console.log(Object.prototype.toString.call(b))
			// console.log(b instanceof Array)
			// console.log(Array.isArray(b))


			// 数组详解
			// var arr = [1,2,3,4];
			// // forEach对数组直接进行循环，有3个参数，跟for类似，但forEach没有返回值，不能进行return
			// arr.forEach((item,index,arr) => {

			// });
			// // map对每一项进行加工返回一个新数组
			// let newarr = arr.map((v,o,arr)=>{
			// 	// return v+1
			// })
			// filter对每一项进行判断，根据返回true，或者false，只有ture返回一个新数组
			// let filterArr = arr.filter((v,i)=>{
			// 	if(v%2==0) {
			// 		return true
			// 	}else {
			// 		return false
			// 	}
			// })
			// reduce是对整个数组进行整合，比如对数组每一项进行相加，return返回一个新内容，0指的是传入的第一项的值
			// var reduceArr = arr.reduce((v,i,index)=>{
			// 	console.log(v,i)
			// 	console.log(index,'index')
			// 	return v+i
			// },0)
			// console.log(reduceArr)
			// for(var item of arr) {
			// 	循环的是数组每一项，没有索引
			// }


			// function f(x) {
			// 	return x*x
			// }
			// var arr = [1,12,2];
			// arr.reduce(function(x,y){
			// 	debugger
			// 	return 1
			// })
			// console.log(a) 
			// 阻止冒泡事件
			// e.stopPropation()||even.cancelBubble = true
			//阻止默认
			// return false || e.prevenDefaule
			// var arr = [['a',1],['b','789'],['c',456,111]];
			//  for(var [v] of arr) {
			// 	console.log(v)
			// }
			// console.log(arr)
			// function runAsync(){
			//     var p = new Promise(function(resolve, reject){
			//         //做一些异步操作
			//         setTimeout(function(){
			//             console.log('执行完成');
			//             resolve('随便什么数据');
			//         }, 2000);
			//     });
			//     return p;            
			// }
			// runAsync().then(res=>{
			// 	var data = JSON.parse(res)
			// 	console.log(data,'数据返回')
			// }).catch(err=>{
			// 	console.log(err,'err')
			// })


			// function getData () {
			// 	new Promise((resolve,reject)=>{
			// 		console.log('随便什么数据')
			// 		resolve ('随便什么数据');
			// 	})
			// }
			// getData().then(res=>{
			// 	console.log(res)
			// })
			// var liLei={
			//   name:'liLei',
			//   money:10,
			//   buyPen:function(){
			//     this.money=this.money-1;
			//     console.log(this.name+" have money:"+this.money)
			//   }
			// }

			// var hanMeiMei={
			//   name:'hanMeiMei',
			//   money:20,
			//   buyPan:function(){
			//     this.money=this.money-2;
			//     console.log(this.name+" have money:"+this.money)
			//   }
			// }
			// var arr = [1,2,3,10]
			// // arr.map(function(v){
			// // 	v = 1
			// // 	console.log(v)
			// // })
			// for(var i=0;i<arr.length;i++) {
			// 	arr[i] = 1
			// }
			// console.log(arr)
			// console.log(a)
			// liLei.buyPen.bind(hanMeiMei)
			// var foo=obj.foo;
			// foo(); //
			// var arr = [2,5,8,10,3,50,11,80,10]
			// function newRrr(list) {
			// 	console.log(list)
			// 	var len = list.length;//数组的长度
			// 	for(var i=0;i<len;i++) {
			// 		var Index,tep;
			// 		for(var j=i;j<list.length;j++) {
			// 			console.log(list[j])
			// 		}
			// 	}
			// 	return 1
			// }
			// var data = newRrr(arr)
			// console.log(data,'data')
		}
	</script>
	<!-- built files will be auto injected -->
</body>

</html>